package com.x.compute.common.function;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.googlecode.aviator.runtime.function.AbstractFunction;
import com.googlecode.aviator.runtime.function.FunctionUtils;
import com.googlecode.aviator.runtime.type.AviatorObject;
import com.googlecode.aviator.runtime.type.AviatorString;

import java.util.Map;

/**
 * 字符串左截取函数
 * 函数示例：LEFT(arg1,arg2)
 * LEFT(字符串变量，截取长度)
 *
 * @author xuxin
 */
public class LeftFunction extends AbstractFunction {

    @Override
    public String getName() {
        return "LEFT";
    }

    /**
     * 函数处理逻辑
     *
     * @param env  变量上下文
     * @param arg1 字符串
     * @param arg2 截取长度
     * @return
     */
    @Override
    public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2) {
        String value = FunctionUtils.getStringValue(arg1, env);
        if (StrUtil.isNotBlank(value)) {
            String length = FunctionUtils.wrapReturn(arg2).getValue(env).toString();
            value = StrUtil.subPre(value, StrUtil.isBlank(length) || !NumberUtil.isNumber(length) ? 0 : Integer.valueOf(length));
        }
        return new AviatorString(value);
    }

}
